home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 2000
/
MacHack 2000.toast
/
pc
/
The Hacks
/
FinderGrok
/
osa stuff
/
Stringiness.cp
< prev
next >
Wrap
Text File
|
2000-06-23
|
4KB
|
221 lines
#include "Stringiness.h"
#include "Str255.h"
#include <sstream>
#ifdef macintosh
#include <UMemoryMgr.h>
#endif
using std::string;
using std::ostringstream;
string
BytesAsString(unsigned long number)
{
const unsigned long kOneMegabyte = 1024 * 1024;
if (number == 0)
return "zero K";
if (number < kOneMegabyte)
return AsString((number + 512) / 1024) + "K";
unsigned long megabytes = number / kOneMegabyte;
unsigned long remainder = number - megabytes * kOneMegabyte;
unsigned long tenths = (remainder * 10 + (kOneMegabyte / 2)) / kOneMegabyte;
if (tenths == 0)
return AsString(megabytes) + " MB";
return AsString(megabytes) + "." + AsString(tenths) + " MB";
}
string
AsString(short number)
{
ostringstream out;
out << number;
return out.str();
}
string
AsString(unsigned short number)
{
ostringstream out;
out << number;
return out.str();
}
string
AsString(int number)
{
ostringstream out;
out << number;
return out.str();
}
string
AsString(unsigned number)
{
ostringstream out;
out << number;
return out.str();
}
string
AsString(long number)
{
ostringstream out;
out << number;
return out.str();
}
string
AsString(unsigned long number)
{
ostringstream out;
out << number;
return out.str();
}
string
AsString(double number)
{
ostringstream out;
out << number;
return out.str();
}
string
HexAsString(unsigned long integer)
{
ostringstream result;
result.width(8);
result.fill('0');
result << std::uppercase << std::hex << integer;
return result.str();
}
string
CharsAsString(unsigned long integer)
{
return string((char*)&integer, 4);
}
string DateAsString(unsigned long integer)
{
Str255 dateString;
DateString(integer, shortDate, dateString, 0);
return AsString(dateString);
}
string TimeAsString(unsigned long integer)
{
Str255 timeString;
TimeString(integer, false, timeString, 0);
return AsString(timeString);
}
void
Substitute(string& inString, const string& oldString, const string& newString)
{
if (oldString == newString)
return;
std::size_t found;
do {
found = inString.find(oldString);
if (found != string::npos)
inString.replace(found, oldString.size(), newString);
} while (found != string::npos);
}
std::vector<string>
SplitString(const string& s, const string& delim)
{
std::vector<string> v;
std::size_t found = 0;
std::size_t start = 0;
std::size_t delim_length = delim.length();
do {
found = s.find(delim, start);
if (found != string::npos) {
v.push_back(string(&s[start], &s[found] - &s[start]));
start = found + delim_length;
}
} while (found != string::npos);
if (start < s.length()) {
v.push_back(string(&s[start], &s[s.length()] - &s[start]));
}
return v;
}
string
JoinString(const std::vector<string>& v, const string& delim)
{
string joinedString;
for (std::vector<string>::const_iterator i = v.begin(); i != v.end(); i++) {
if (i != v.begin())
joinedString.append(delim);
joinedString.append(*i);
}
return joinedString;
}
bool StringToTime(const string& inData, LongDateRec& dateTime)
{
bool dateCacheInit = false;
static DateCacheRecord dateCache;
if (!dateCacheInit) {
ThrowIfOSErr_(InitDateCache(&dateCache));
dateCacheInit = true;
}
bool isTime = false;
long lengthUsed;
StringToDateStatus status = StringToTime(const_cast<char*>(inData.data()), inData.size(),
&dateCache, &lengthUsed, &dateTime);
if (noErr == status) {
isTime = true;
}
return isTime;
}
#ifdef macintosh
string
AsString(Handle handle)
{
MoveHHi(handle);
StHandleLocker lock(handle);
return string(*handle, GetHandleSize(handle));
}
class HandleDestroyer {
public:
HandleDestroyer(Handle handle) { mHandle = handle; }
~HandleDestroyer();
operator Handle() const { return mHandle; }
private:
Handle mHandle;
HandleDestroyer(const HandleDestroyer&);
HandleDestroyer& operator =(const HandleDestroyer&);
};
HandleDestroyer::~HandleDestroyer()
{
DetachResource(mHandle);
DisposeHandle(mHandle);
}
string
ConvertToString(Handle handle)
{
return AsString(HandleDestroyer(handle));
}
#endif // macintosh